package br.ucb.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.ucb.dao.EmprestimoDAO;
import br.ucb.entidade.Emprestimo;


public class EmprestimoDAOImpl_1 extends AbstractEntidadeDAO<Emprestimo> implements EmprestimoDAO {

	@Override
	protected List<Object> doPreparedStatement(Emprestimo entidade,
			StringBuffer query) {
		List<Object> args = new ArrayList<Object>();
		
		if(entidade.getCpf()!=null){
			query.append(" AND cpf = ?");
			args.add(entidade.getCpf());
		}		
		if(entidade.getCodigo()!=null){
			query.append(" AND codigoLivro LIKE '%?%'");
			args.add(entidade.getCodigo());
		}
		if(entidade.getDataEmprestimo()!=null){
			query.append(" AND dataEmprestimo = ?");
			args.add(entidade.getDataEmprestimo());
		}
		if(entidade.getDataPrevistaRetorno()!=null){
			query.append(" AND dataPrevistaRetorno = ?");
			args.add(entidade.getDataPrevistaRetorno());
		}
		if(entidade.getDataRetornoEfetivado()!=null){
			query.append(" AND dataRetornoEfetivado = ?");
			args.add(entidade.getDataRetornoEfetivado());
		}
		
		query.append(";");
		
		return args;
	}

	@Override
	protected List<Object> getInsertValues(Emprestimo entidade, StringBuffer sql) {
		List<Object> args = new ArrayList<Object>();
		
		if(entidade.getCpf()!=null){
			sql.append("?,");
			args.add(entidade.getCpf());
		}
		if(entidade.getCodigo()!=null){
			sql.append("?,");
			args.add(entidade.getCodigo());
		}		
		if(entidade.getDataEmprestimo()!=null){
			sql.append("?,");
			args.add(entidade.getDataEmprestimo());
		}
		if(entidade.getDataPrevistaRetorno()!=null){
			sql.append("?,");
			args.add(entidade.getDataPrevistaRetorno());
		}
		if(entidade.getDataRetornoEfetivado()!=null){
			sql.append("?,");
			args.add(entidade.getDataRetornoEfetivado());
		}
		
		if(sql.charAt(sql.length()-1)==',')
			sql.deleteCharAt(sql.length()-1);
		
		return args;
	}

	@Override
	protected String getTableValues(Emprestimo entidade) {
		StringBuffer query = new StringBuffer();
		if(entidade.getCpf()!=null){
			query.append("cpf,");
		}
		if(entidade.getCodigo()!=null){
			query.append("codigoLivro,");
		}		
		if(entidade.getDataEmprestimo()!=null){
			query.append("dataEmprestimo,");
		}
		if(entidade.getDataPrevistaRetorno()!=null){
			query.append("dataPrevistaRetorno,");
		}
		if(entidade.getDataRetornoEfetivado()!=null){
			query.append("dataRetornoEfetivado,");
		}
		if(query.charAt(query.length()-1)==',')
			query.deleteCharAt(query.length()-1);
		
		return query.toString();
	}

	@Override
	protected List<Emprestimo> retornaListaEntidades(ResultSet resultado) {
		List<Emprestimo> lista = new ArrayList<Emprestimo>();
		try {
			while(resultado.next()){
				lista.add(new Emprestimo(resultado.getString(1), resultado.getInt(2), resultado.getDate(3), resultado.getDate(4), resultado.getDate(5)));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return lista;
	}

	@Override
	protected String doUpdate(Emprestimo entidade, List<Object> args) {
		StringBuffer update = new StringBuffer("update emprestimo set");
		
		if(entidade.getCpf()!=null){
			update.append(" cpf = ?,");
			args.add(entidade.getCpf());
		}		
		if(entidade.getCodigo()!=null){
			update.append(" codigoLivro = ?,");
			args.add(entidade.getCodigo());
		}
		if(entidade.getDataEmprestimo()!=null){
			update.append(" dataEmprestimo = ?,");
			args.add(entidade.getDataEmprestimo());
		}
		if(entidade.getDataPrevistaRetorno()!=null){
			update.append(" dataPrevistaRetorno = ?,");
			args.add(entidade.getDataPrevistaRetorno());
		}
		if(entidade.getDataRetornoEfetivado()!=null){
			update.append(" dataRetornoEfetivado = ?,");
			args.add(entidade.getDataRetornoEfetivado());
		}
		
		if(update.charAt(update.length()-1)==',')
			update.deleteCharAt(update.length()-1);
		
		update.append(" where cpf = ? and codigoLivro = ?;");
		args.add(entidade.getCpf());
		args.add(entidade.getCodigo());
		
		return update.toString();
	}

	@Override
	protected void setTable() {
		super.table = "emprestimo";
	}

	@Override
	protected Emprestimo retornaEntidades(ResultSet resultado) {
		Emprestimo emprestimo=null;
		try {
			while(resultado.next()){
				emprestimo = new Emprestimo(resultado.getString(1), resultado.getInt(2), resultado.getDate(3), resultado.getDate(4), resultado.getDate(5));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return emprestimo;
	}

}
